Model based techniques may be used for modeling software systems by generating tests for verifying the behavior of a computing system on which the software is executed. A model includes a set of attributes in addition to values for the attributes and corresponding restrictions on said values or value combinations. The set of valid value combinations defines the space to be tested.
In a Cartesian-product based model, the test space is defined as all possible combinations of variable (i.e., attribute) values that are not ruled out by restrictions. The size of a Cartesian-product based model is the product of the number of values for each attribute (i.e., A1*A2* . . . *An), where An represents the number of valid values for the nth attribute. One would appreciate that the size of the model can become prohibitively large, depending on the number of attributes and the possible number of values assigned to each attribute.
Depending on the testing environment, tests may be selected from large data sets or large test suits where the set of values for one or more attributes may be too large to be accommodated by the available resources in a computing system under test. In some scenarios, there may be multiple values that are equivalent with respect to a given testing. Thus, it may be desirable to select tests based on properties associates with values, instead of the values themselves.
For example, in healthcare there are thousands of diagnosis codes. Testing all of them, not to mention combinations of all of them, with procedure codes, for example, may consume a vast volume of resources. It would be desirable to reduce the number of tests by requiring coverage of groups of codes (e.g., blood vs. bone related diagnosis). Such groups may be semantic or procedural. That is, a group of values may share the same processing path and hence only one value from each group may need to be covered.
Currently, implementing a grouping such as that noted above requires writing a program or a script that transforms the original input values to the smaller set of groups or group representatives. The coding process is an expensive, time consuming step and requires skills that are frequently not available to the novice members of test teams. A less expensive and more flexible alternative is desirable that can be used to simplify the modeling of software system.